package com.caowj.composedemo.activity

import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.caowj.composedemo.R
import com.caowj.composedemo.ui.theme.ComposeDemoTheme

/**
 *  Text文本控件
 * https://blog.csdn.net/qq_41899289/article/details/120158136
 */
class TextActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ComposeDemoTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    TextDemo()
                }
            }
        }
    }
}


@Composable
fun TextDemo() {
    //垂直布局
    Column {
        _Greeting2("Android")
        //显示资源中的文字
        Text(stringResource(id = R.string.app_name))
        //最多显示行数 , 溢出处理
        Text(
            text = "你好呀陌生人，这是一个标题，不是很长，因为我想不出其他什么比较好的标题了",
            //宽度
            modifier = Modifier.width(200.dp),
            //设置 最多显示行数
            maxLines = 1,
            //溢出处理 省略
            overflow = TextOverflow.Ellipsis
        )
        //文字颜色
        Text(text = "Hello World", color = Color.Blue)
        //文字大小
        Text(text = "Hello World", fontSize = 30.sp)
        //斜体
        Text(text = "Hello World", fontStyle = FontStyle.Italic)
        //粗体
        Text(text = "Hello World", fontWeight = FontWeight.Bold)
        //文字对齐 (居中)
        Text(
            text = "Hello World Hello World\nHello World",
            //文本的对齐方式
            textAlign = TextAlign.Center
        )
        //设置宽度与高度
        Text(
            text = "Hello World",
            //居中对齐
            textAlign = TextAlign.Center,
            modifier = Modifier
                //宽度
                .width(100.dp)
                //高度
                .height(30.dp)
        )
        //字体设置
        Text(text = "Hello World", fontFamily = FontFamily.Serif)
        //字体设置
        Text(text = "Hello World", fontFamily = FontFamily.SansSerif)
//            //自定义 fontFamily
//            val firaSansFamily = FontFamily(
//                Font(R.font.firasans_light, FontWeight.Light),
//                Font(R.font.firasans_regular, FontWeight.Normal)
//            )
//            //字体设置
//            Text(
//                text = "Hello World",
//                fontFamily = firaSansFamily,
//                fontWeight = FontWeight.Light
//            )
//            //字体设置
//            Text(
//                text = "Hello World",
//                fontFamily = firaSansFamily,
//                fontWeight = FontWeight.Normal
//            )
        //文本中间绘制线
        Text(
            text = "Hello World",
            style = TextStyle(textDecoration = TextDecoration.LineThrough)
        )
        //文本下方绘制线  下划线
        Text(
            text = "Hello World",
            style = TextStyle(textDecoration = TextDecoration.Underline)
        )
        //设置多个 textDecoration
        Text(
            text = "Hello World",
            style = TextStyle(
                textDecoration =
                TextDecoration.combine(
                    listOf(
                        TextDecoration.LineThrough,
                        TextDecoration.Underline
                    )
                )
            )
        )
        //设置样式
        Text(text = buildAnnotatedString {
            withStyle(
                style = SpanStyle(
                    //字体颜色
                    color = Color.Blue
                )
            ) {
                append("H")
            }
            append("ello ")
            withStyle(
                style = SpanStyle(
                    //粗体
                    fontWeight = FontWeight.Bold,
                    //字体颜色
                    color = Color.Green
                )
            ) {
                append("W")
            }
            append("orld")
        })
        //设置段落样式
        Text(text = buildAnnotatedString {
            withStyle(
                style = ParagraphStyle(
                    //行高间距
                    lineHeight = 40.sp
                )
            ) {
                withStyle(
                    style = SpanStyle(
                        //字体颜色
                        color = Color.Yellow
                    )
                ) {
                    append("Hello\n")
                }
                withStyle(
                    style = SpanStyle(
                        //粗体
                        fontWeight = FontWeight.Bold,
                        //字体颜色
                        color = Color.Red
                    )
                ) {
                    append("World\n")
                }
                append("Compose")
            }
        })
        //设置最大行数
        Text(
            //重复字符串
            text = "Hello World ".repeat(20),
            //设置行数
            maxLines = 3
        )
        //文字溢出处理
        Text(
            text = "Hello World".repeat(20),
            //设置最大行数
            maxLines = 3,
            //溢出处理：省略号
            overflow = TextOverflow.Ellipsis
        )
        // 将内部 Text 组件的 alpha 强调程度设置为高
        // 注意: MaterialTheme 已经默认将强调程度设置为 high
        CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.high) {
            Text("这里是high强调效果")
        }
        // 将内部 Text 组件的 alpha 强调程度设置为中
        CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
            Text("这里是medium强调效果")
        }
        // 将内部 Text 组件的 alpha 强调程度设置为禁用
        CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.disabled) {
            Text("这里是禁用后的效果")
        }
    }
}

@Composable
fun _Greeting2(name: String) {
    Text(
        text = "Hello $name!这是一个Text控件这是一个Text控件这是一个Text控件",                   //文字内容
        modifier = Modifier
            .height(50.dp)
            .fillMaxWidth(),
        color = MaterialTheme.colors.primary,           //字体颜色，这里是引用了主题里的颜色，也可以直接用比如Color.Red这种
        fontSize = 18.sp,                             //字体大小,sp为单位
        fontStyle = FontStyle.Italic,                //正常/斜体
        fontWeight = FontWeight.Bold,                //字体的粗细（范围1-1000），Bold为700,每100系统都有一个预定义好的常量,数值越大字体越粗
//            fontWeight= FontWeight(777),              //也可以自己自定义
        fontFamily = FontFamily.Cursive,             //字体系列,提供了几种字体，Cursive为手写体
        letterSpacing = 5.sp,                         //字符间距，sp为单位
        textDecoration = TextDecoration.Underline,   //文本装饰，有正常，下滑线，删除线三种类型
        textAlign = TextAlign.Start,                   //文本对齐方式，左对齐/右对齐/居中对齐分散对齐/头对齐/尾对齐
        lineHeight = 10.sp,                           //行高，sp尾单位
        overflow = TextOverflow.Ellipsis,            //文本超出显示方式，裁剪/省略号/显示
        softWrap = true,                             //是否换行，默认true
        maxLines = 1,                               //最大行数
        onTextLayout = {
            Log.d("caowj", "回调信息：${it.size}")
        },                                          //文本布局回调
        style = TextStyle.Default                   //样式，TextStyle可以自定义许多东西，除了以上大部分内容还有更多的东西，适合用来自定义更复杂的字体样式
    )
}